Skip to content

feat: let an environment publish themes as a file - #8569

Merged
t3dotgg merged 16 commits into
pingdotgg:mainfrom
ryanrhughes:environment-theme
Aug 29, 2026
Merged

feat: let an environment publish themes as a file#8569
t3dotgg merged 16 commits into
pingdotgg:mainfrom
ryanrhughes:environment-theme

Conversation

@ryanrhughes

@ryanrhughes ryanrhughes commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

What Changed

Allows a machine can drop theme files into <stateDir>/themes/ and they show up as themes in every web and desktop client connected to that environment. The filename is the id — themes/nightfall.json becomes nightfall.

The server watches that directory and streams the set over subscribeServerConfig. Clients render each one as a card in the theme library. Change a file, connected clients retint in about 100ms.

Two formats work. A theme exported straight out of T3 Code — the Download button's JSON — drops in unchanged. Or a short seeded form if all you've got is a background and an accent:

{ "name": "Nightfall", "appearance": "dark", "canvas": "#1a1b26", "accent": "#7aa2f7" }

The seeded form runs through createVividThemeColors, the same generator the guided editor uses, so it comes out looking like a T3 Code theme instead of a transplant from someone else's app.

Also adds t3 theme set <id|file>, t3 theme clear, and t3 theme show. set takes an id or a path — a path publishes the file and sets it in one step.

Things I specifically made sure of:

  • The new stream event is gated behind a client capability flag. Without it, an already-shipped client hits an unknown union member and its whole config subscription dies — settings, keybindings, provider status, all of it, for the rest of the session. Old clients just never get the event.
  • Reserved ids can't be published. A dark.json would otherwise hijack everyone whose stored preference is the stock "dark".
  • A theme you saved locally always beats a published one with the same id.
  • Each theme set applies once per client. Pick something else in Settings afterward and that sticks until the next set.
  • Mobile keeps its own appearance settings. It has no custom theme support at all, so there was nothing to hook into.

Why

Selfishly, getting proper theme synchronization to work properly with Omarchy was the main motivation here. However the implementation has been approached such that the use cases are broader than Omarchy and in no way Omarchy-specific.

Themes live in browser localStorage today. That's per-client — so a machine has no way to offer one, a file has no way to carry one, and there's no way to provision a box so T3 Code opens matching it.

This is a primitive for file-based themes, not a desktop integration. Drop a theme file in, get a live card. Share one file to theme a whole team's environment. Edit it in vim and watch clients retint. Delete it and it's gone everywhere.

If it's helpful at all, omacom/omarchy#8784 is the counterpart PR in Omarchy showing this in action.

UI Changes

The UI itself doesn't change other than when a change to the active theme file triggers an update.

screenrecording-2026-08-28_12-15-54_trimmed.mp4

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • I included a video for animation/interaction changes

Note

Medium Risk
Touches filesystem publishing, concurrent settings.json writes, and the config WebSocket stream; mitigated by capability gating, atomic publish/rollback, and extensive integration tests, but skewed or mis-provisioned themes could still surprise connected clients.

Overview
Adds environment-published themes: machines can place theme JSON under the state directory’s themes/ folder (or use t3 theme set / clear / show) so web and desktop clients see live palette cards and can follow a defaultTheme provisioned in settings.json.

The server gains an EnvironmentTheme watcher (guarded reads, size/id limits, debounced directory refresh) and advertises environmentThemes capability. subscribeServerConfig only emits environmentThemesUpdated when the client opts in, so older clients are not broken by a new stream event. Client-runtime keeps published themes out of the config cache and across reconnect snapshots only while the server still supports the feature.

On web, published themes merge into the theme library (duplicate-only cards), useDefaultThemeAdoption applies each environment set once per generation, and theme storage/preview handling is tightened so late-arriving published ids and editor drafts are not dropped incorrectly.

Reviewed by Cursor Bugbot for commit b211fa4. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Add environment-published themes with server file streaming and CLI

  • Server reads theme JSON files from <stateDir>/themes, validates them (size, name, symlinks, reserved ids), and streams updates to opted-in clients via a new environmentThemesUpdated event on subscribeServerConfig.
  • Adds a t3 theme CLI to set/clear a default theme and publish theme files into the themes directory.
  • Client runtime treats environmentThemes as ephemeral (stripped from cached/persisted config), carries them through projections only when the server advertises the environmentThemes capability, and drops them on reconnect to a downgraded server.
  • Web app syncs published themes into the theme library, lists them as non-editable duplicate-only cards in ThemeLibrary, and adopts an environment default theme once per generation via useDefaultThemeAdoption.
  • useTheme gains preservePreview on applyTheme/refreshTheme, exposes resolvedTheme in the snapshot, and setThemeHalf now reads raw halves to avoid pruning unresolved references.
  • Risk: subscribeServerConfig payload schema changed from empty struct to optional environmentThemes boolean; old servers still accept {environmentThemes: true} but any out-of-tree decoder assuming the exact empty struct may fail. getThemeDefinition resolution order now checks environmentThemeDefinitions after built-in and custom themes, so a user-saved theme with the same id as a published one still wins.

Macroscope summarized b211fa4.

Maintainer follow-up

Live theme changes now update React's resolved appearance. An open theme editor keeps its draft while files, defaults, or system appearance change. Closing the editor restores the latest selected palette. Published palettes with no usable colors are omitted on that client.

Verified with 96 focused tests, the web typecheck, and targeted lint. Rebased onto current main. Browser verification has not run.

Hosted app support and publication limits are unchanged.

Original feature by @ryanrhughes. Follow-up fixes by GPT-5.6 Sol using Codex.

@coderabbitai

coderabbitai Bot commented Aug 28, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 4f8db60d-703d-45f1-81b0-7a8df0dd2671

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XL 500-999 changed lines (additions + deletions). labels Aug 28, 2026

@macroscopeapp macroscopeapp Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Effect service conventions review of the new EnvironmentTheme service and t3 theme CLI. The service definition, layer wiring, namespace imports, and consumer updates (server.ts, ws.ts, server.test.ts) follow the conventions. Findings are limited to the CLI error model in apps/server/src/cli/theme.ts and one make export nit.

Posted via Macroscope — Effect Service Conventions

Comment thread apps/server/src/environmentTheme.ts
Comment thread apps/server/src/cli/theme.ts Outdated
Comment thread apps/server/src/cli/theme.ts Outdated
Comment thread apps/web/src/components/settings/ThemeSettings.tsx Outdated
Comment thread apps/server/src/cli/theme.ts Outdated
Comment thread apps/server/src/cli/theme.ts Outdated

@macroscopeapp macroscopeapp Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two consistency issues in the new environment-theme UI paths; both are small, contained fixes in apps/web/src. Everything else (card composition, Tailwind ownership, lenientThemeColorOverrides extraction, atom wiring) matches the existing theme-library patterns.

Posted via Macroscope — UI Consistency

Comment thread apps/web/src/hooks/useEnvironmentTheme.ts Outdated
Comment thread apps/web/src/components/settings/ThemeSettings.tsx Outdated
@macroscopeapp

macroscopeapp Bot commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This PR adds a substantial environment-wide theme capability spanning filesystem watching, CLI settings, WebSocket contracts, client state, and live web behavior. It also introduces environment-selected theme defaults that can change how connected clients initialize and respond, so the breadth and product impact require human review.

You can add or adjust custom eligibility rules. Learn more.

@github-actions github-actions Bot added size:XXL 1,000+ changed lines (additions + deletions). and removed size:XL 500-999 changed lines (additions + deletions). labels Aug 28, 2026

@macroscopeapp macroscopeapp Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two error-modeling nits in apps/server/src/cli/theme.ts; the earlier findings (per-failure tagged errors, exported make in environmentTheme.ts) look addressed.

Posted via Macroscope — Effect Service Conventions

Comment thread apps/server/src/cli/theme.ts Outdated
Comment thread apps/server/src/cli/theme.ts
Comment thread apps/server/src/environmentTheme.ts Outdated
Comment thread apps/server/src/cli/theme.ts
Comment thread apps/server/src/environmentTheme.ts Outdated
Comment thread apps/server/src/environmentTheme.ts Outdated
Comment thread apps/server/src/cli/theme.ts Outdated
Comment thread apps/server/src/cli/theme.ts Outdated
Comment thread apps/server/src/cli/theme.ts Outdated

@macroscopeapp macroscopeapp Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding on the new environment-theme adoption path; the two issues flagged on the previous run (published-card onUse half assignment and the over-broad managed: true) are resolved in this revision.

Posted via Macroscope — UI Consistency

Comment thread apps/web/src/hooks/useDefaultTheme.ts Outdated
Comment thread apps/server/src/environmentTheme.ts Outdated
Comment thread apps/web/src/hooks/useDefaultTheme.ts
Comment thread apps/server/src/environmentTheme.ts Outdated
Comment thread apps/server/src/cli/theme.ts Outdated

@macroscopeapp macroscopeapp Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding: assigning a published environment theme to a light/dark half persists an id whose resolvability is transient, and the existing half-write path prunes unresolvable ids before writing.

Posted via Macroscope — UI Consistency

Comment thread apps/web/src/components/settings/ThemeSettings.tsx
Comment thread apps/server/src/cli/theme.ts Outdated
Comment thread apps/server/src/cli/theme.ts Outdated
Comment thread apps/server/src/cli/theme.ts
Comment thread apps/server/src/cli/theme.ts
Comment thread apps/server/src/cli/theme.ts Outdated

@macroscopeapp macroscopeapp Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One follow-up on the published-id/theme-mix interaction; the readStoredThemeHalvesRaw fix covers setThemeHalf, but two read-modify-write flows in ThemeSettings still rebuild the mix from the pruned snapshot.

Posted via Macroscope — UI Consistency

Comment thread apps/web/src/components/settings/ThemeSettings.tsx
@t3dotgg

t3dotgg commented Aug 29, 2026

Copy link
Copy Markdown
Member

This is super close. Want to make sure react state doesn't go out of sync. Will push a few small changes and get this merged

@t3dotgg
t3dotgg force-pushed the environment-theme branch from a84dccf to 4d855e9 Compare August 29, 2026 05:16
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. and removed vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Aug 29, 2026
ryanrhughes and others added 11 commits August 28, 2026 22:22
…dget

Three review findings on the environment theme feature: the change PubSub
was unbounded so a stalled subscriber retained every published set; skipped
files were charged against the aggregate size cap and could hide valid
themes sorted after them; and a failed appearance switch still recorded the
default theme as applied, suppressing retries.

Fixed with a sliding capacity-1 PubSub (only the newest complete set
matters), accounting bytes only for accepted themes, and recording the
applied generation only after both the theme and appearance land.

Model: Fable 5 via Claude Code
t3 theme set <path> published into the themes directory before touching
settings, so an unreadable or malformed settings file failed the command
after it had already mutated the environment. Reading the settings first
fails fast and leaves nothing half-applied.

Model: Fable 5 via Claude Code
Appending a trailing newline could push a file at the size limit one byte
past it, so the watcher would skip a publish the command reported as
successful. Copying the bytes as given keeps accepted and published
identical.

Model: Fable 5 via Claude Code
Three review findings. Reading a theme file after checking its path left a
gap where the file could be swapped for a FIFO or symlink; both the watcher
and the CLI now read through one opened handle (O_NOFOLLOW, O_NONBLOCK,
fstat on the descriptor), which also replaces the watcher's realPath
containment dance. A failed t3 theme set now rolls back the file it
published instead of leaving the environment's theme set changed. And
setThemeHalf merges over the raw stored halves, so changing one half no
longer erases a published id that has not streamed in yet.

Model: Fable 5 via Claude Code
The rollback capture reads the destination through the guarded reader,
which reports a symlink, oversized, or unreadable entry the same as an
absent one -- so a failed set would have deleted it. Publishing now fails
up front when something occupies the destination that could not be put
back.

Model: Fable 5 via Claude Code
The colors record now requires role-shaped keys and color-sized values, so
it stays open to roles a newer client adds without being a channel for
arbitrary payloads. The aggregate size cap now counts UTF-8 bytes rather
than string length, matching the wire weight it describes.

Model: Fable 5 via Claude Code
Two review findings. Reading the user-supplied source with O_NOFOLLOW
rejected a symlink to a valid theme, which is a normal way to point at the
current palette; the source is now resolved first while the guarded read
still rejects FIFOs and oversized targets. And publishing no longer checks
the destination and then writes over it: the new file is staged in full,
whatever occupies the destination is moved aside, and the commit is two
adjacent renames -- rollback restores the exact previous entry, success
discards it, and a rename failure other than absence aborts untouched.

Model: Fable 5 via Claude Code
Staging names now carry the pid, so simultaneous publishers of one id
cannot clear each other's half-written stage, and revert removes the
destination only while its inode is still the file this process put there.
Fully serializing simultaneous same-id publishers would need a
per-destination lock, which a single-user provisioning command does not
warrant; the residual overlap is last-writer-wins.

Model: Fable 5 via Claude Code
Backup files now carry the pid like staging does, and revert touches the
destination only while it is empty or still holds this process's file, so
concurrent publishers cannot unlink or restore over each other's work.

On the web side, the two Settings flows that rebuild the whole appearance
mix now capture the stored halves raw before the base write clears them --
the pruned prop drops a published half whose set has not streamed in yet,
and rebuilding from it silently rewrote that half to the base theme.

Model: Fable 5 via Claude Code

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 4d855e920b6748fcd23fb8ca1b9f4b52d7a45e52. Configure here.

Comment thread apps/server/src/environmentTheme.ts
@t3dotgg
t3dotgg force-pushed the environment-theme branch from 4d855e9 to b211fa4 Compare August 29, 2026 05:28
Comment thread apps/server/src/environmentTheme.ts
@t3dotgg
t3dotgg merged commit c1c2d54 into pingdotgg:main Aug 29, 2026
27 checks passed
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Aug 29, 2026
## What's Changed
* feat(web): attach PDFs, ZIPs, and other files to a turn by @t3dotgg in pingdotgg/t3code#8236
* feat(web): keybinding settings as settings rows by @StiensWout in pingdotgg/t3code#8532
* feat: let an environment publish themes as a file by @ryanrhughes in pingdotgg/t3code#8569
* fix(web): clean up provider settings list and editor by @StiensWout in pingdotgg/t3code#8504
* fix(web): keep project picker popup inside the sidebar by @SunkenInTime in pingdotgg/t3code#8627
* fix(mobile): prevent header overflow and back-button artifacts by @juliusmarminge in pingdotgg/t3code#8624

## New Contributors
* @ryanrhughes made their first contribution in pingdotgg/t3code#8569

**Full Changelog**: pingdotgg/t3code@v0.0.37-nightly.20260829.1218...v0.0.37-nightly.20260829.1219

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.37-nightly.20260829.1219
longtngo added a commit to longtngo/t3code that referenced this pull request Aug 29, 2026
Range f6f2be3..053affb, v0.0.36. 411 upstream files, 632 fork files,
81 touched by both, 19 conflicted.

Competing implementations resolved toward the fork's superset:

- Claude context usage (pingdotgg#8610). Upstream deleted `queryCurrentContextUsage` and
  `normalizeClaudeContextUsageApiSnapshot` outright. `getContextUsage` is the ONLY
  source of the compaction facts (`autocompactSource`, `autoCompactThreshold`,
  `isAutoCompactEnabled`) the Vitals gauge's compaction note and marker render from,
  and they travel on the wire contract, so the call is kept. Upstream's
  `latestAssistantUsage` tracking and its post-compaction guard are adopted BELOW it
  as the next-best fallback: `contextUsageSnapshot ?? latestAssistantSnapshot ?? ...`.
  Upstream removed `getContextUsage` from `ClaudeQueryRuntime`, the
  `SDKControlGetContextUsageResponse` import and the `Option` import outside every
  conflict marker; all three restored.
- Provider settings editor (pingdotgg#8472). Upstream's `useEffect` + `lastPublishedEnvironmentRef`
  re-seed is the superset of the fork's render-phase `seededRef` (8fe3190, one of four
  silent-data-loss fixes). The merge had kept BOTH mechanisms; collapsed to upstream's,
  with the fork's half-typed-row null guard on the publish path. `environmentKey` deleted
  with the code it served.
- Sidebar project combobox (pingdotgg#5931). Upstream replaced the menu-based project filter,
  whose `MenuRadioItem` carried the fork's project-actions button. Rebuilt on upstream's
  `ComboboxItem` with the ellipsis button grafted back (invariant 6). The dead `Menu*`
  import is gone.
- Composer attachments (pingdotgg#8236). Upstream's `addComposerAttachments` pipeline adopted; the
  fork's drop split (image -> attach, other -> absolute path with upload fallback) kept
  and repointed at the new handler.
- Mid-turn steer. Upstream's `steeringTurnState` branch rejected again (invariant 5); its
  side of that hunk also opened an `if` whose brace lives below the hunk.
- Thread deletion drain (pingdotgg#8226). Upstream replaced `drain` with `drainThrough(sequence)`;
  the fork's test retargeted. Its new drain test observed `ProviderService.stopSession`,
  which this reactor never calls (it dispatches `thread.session.stop`), so it now counts
  engine dispatches and provides the two services the fork's reactor needs.

Three defects the resolutions introduced, each caught by a check that is not the suite:

- `shouldShowBranchMismatchBanner` was resurrected into two import lists by resolving
  them toward upstream. Fork commit cfdf255 replaced that function; the import had no
  definition. Found by the RESURRECTED sweep.
- `scriptPath` ended up declared twice in CodexCollabRuntime.integration.test.ts: `both`
  reintroduced upstream's fixture-dir copy that the fork deliberately moved to a temp dir.
  Found by the RESURRECTED sweep.
- `setProjectScopeMenuOpen` survived in the fork's `handleProjectActions` after upstream
  replaced that state with a reducer, outside every marker. Found by typecheck.

Upstream regressions of fork fixes, kept fixed:

- Raw NUL bytes returned to ChatComposer.tsx. A raw NUL renders as nothing in grep and
  aborts BSD sed mid-file; the fork had converted all six to `\0` escapes and carries a
  guard test for it. The guard failed, and the offending line reads as space-separated in
  any normal diff. Converted back to escapes.
- `defaultTheme` / `defaultThemeSetAt` (pingdotgg#8569) are absent from `ServerSettingsPatch`; the
  fork's patch-parity guard caught it. They are owned by `t3 theme set`, which rewrites
  settings.json directly and which clients only read, so they are recorded as deliberately
  unpatchable rather than mirrored.
- The fork's mobile held-messages strip used `dark:` variants that upstream's new Uniwind
  theme rule (pingdotgg#7327) forbids; moved to the `text-foreground-muted` semantic token rather
  than added to the rule's allowlist.

Invariants: all re-probed against the merged tree. 1 (49 migrations, ids unique and
monotonic, max 50, 34 burned), 2 (the fork-only @effect/platform-node patch survived the
Expo 57 rewrite of patchedDependencies, is pinned, resolved and applied on disk; effect
stays at beta.103 so no re-pin), 3, 4, 4b (4 `isSendBlocked=`), 5, 5b, 5c, 6, 7, 8, 9, 10,
11 all hold.

Sweeps: resurrected 3, dropped 21, fork-loss 45, both-kept 0. Every entry named: the 3
resurrected and the fork-loss in ProviderInstanceCard / ChatComposer / Sidebar are the
decisions above; the OpenCode fork-loss is 11 comment lines whose guard upstream extracted
into `deleteContextIfCurrent` (the rationale is restored on the helper); pnpm-lock churn is
the install. Test declarations 18,691 -> 19,081; one file lost one, upstream's own pingdotgg#8484.

Gate: pnpm run verify green, exit 0 read from the captured log line. 14 blocks,
10,744 passed, 20 skipped, 0 failures.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
bcotrim pushed a commit to bcotrim/mognet that referenced this pull request Aug 30, 2026
Co-authored-by: Theo Browne <me@t3.gg>
(cherry picked from commit c1c2d54)
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Aug 31, 2026
## What's Changed
* Remove Messages Glass Lab experiment by @juliusmarminge in pingdotgg/t3code#8599
* Require human review for pull requests changing product defaults by @juliusmarminge in pingdotgg/t3code#8603
* fix(codex): avoid quadratic app-server input buffering by @juliusmarminge in pingdotgg/t3code#8605
* fix(mobile): stabilize iOS header item transitions by @juliusmarminge in pingdotgg/t3code#8607
* chore(mobile): upgrade to Expo SDK 57 by @juliusmarminge in pingdotgg/t3code#8609
* fix(mobile): harden native header toolbar items by @juliusmarminge in pingdotgg/t3code#8611
* fix(server): stop querying Claude context usage after turns by @t3dotgg in pingdotgg/t3code#8610
* chore: vouch ryanrhughes by @t3dotgg in pingdotgg/t3code#8613
* feat(web): attach PDFs, ZIPs, and other files to a turn by @t3dotgg in pingdotgg/t3code#8236
* feat(web): keybinding settings as settings rows by @StiensWout in pingdotgg/t3code#8532
* feat: let an environment publish themes as a file by @ryanrhughes in pingdotgg/t3code#8569
* fix(web): clean up provider settings list and editor by @StiensWout in pingdotgg/t3code#8504
* fix(web): keep project picker popup inside the sidebar by @SunkenInTime in pingdotgg/t3code#8627
* fix(mobile): prevent header overflow and back-button artifacts by @juliusmarminge in pingdotgg/t3code#8624
* fix(server): retry automatic thread title generation by @Bil0000 in pingdotgg/t3code#8087
* fix(client-runtime): refresh edited pull request comments by @Bil0000 in pingdotgg/t3code#8094
* fix(web): four composer spacing defects by @Bil0000 in pingdotgg/t3code#8090
* perf(desktop): skip duplicate browser updates by @Bil0000 in pingdotgg/t3code#8018
* fix(web): render nested markdown images correctly by @flamboh in pingdotgg/t3code#8501
* fix(web): unify activity logs and composer banners by @juliusmarminge in pingdotgg/t3code#8693
* fix(mobile): reduce dev-client reload and Metro startup cost by @juliusmarminge in pingdotgg/t3code#8694
* revert(web): restore previous composer banners by @t3dotgg in pingdotgg/t3code#8733
* test(web): remove tests for unreachable helpers by @t3-code[bot] in pingdotgg/t3code#8738
* feat(mobile): update tool summaries and chat transitions by @juliusmarminge in pingdotgg/t3code#8793
* feat(web): play video attachments in chat by @Bil0000 in pingdotgg/t3code#8688
* fix(web,mobile): snooze menu no longer offers the same wake time twice by @vitalyiegorov in pingdotgg/t3code#8741
* fix(grok): allow model changes in existing threads by @ahmed-besic in pingdotgg/t3code#8392
* feat(mobile): pick, share, and receive files in threads by @t3dotgg in pingdotgg/t3code#8237
* fix(web): reduce title bar scroll fade height by @maria-rcks in pingdotgg/t3code#8799
* fix(windows): strip quotes from repaired PATH by @UtkarshUsername in pingdotgg/t3code#8746
* fix(web): open agent images in expanded preview by @maria-rcks in pingdotgg/t3code#8807
* fix(git): follow repository instructions in generated source control text by @maria-rcks in pingdotgg/t3code#8804
* fix(server): stop overpricing cached Claude tokens by @SunkenInTime in pingdotgg/t3code#8806
* fix(web): keep image preview above sidebar control by @maria-rcks in pingdotgg/t3code#8811
* fix(web): keep right panel synced with agent edits by @maria-rcks in pingdotgg/t3code#8803
* fix(web,mobile): render Codex citations and artifact templates by @Yash-Singh1 in pingdotgg/t3code#8584
* chore: add Windows setup script to t3.json by @UtkarshUsername in pingdotgg/t3code#8814
* fix(web): fold interim turn responses by @maria-rcks in pingdotgg/t3code#8828
* fix(web): use circle alert for failed tool calls by @maria-rcks in pingdotgg/t3code#8840
* feat(mobile): add offline iPhone voice input by @t3dotgg in pingdotgg/t3code#8614
* fix(web): prevent pull request metadata overlap by @MatthewFeroz in pingdotgg/t3code#8790

## New Contributors
* @ryanrhughes made their first contribution in pingdotgg/t3code#8569
* @ahmed-besic made their first contribution in pingdotgg/t3code#8392
* @MatthewFeroz made their first contribution in pingdotgg/t3code#8790

**Full Changelog**: pingdotgg/t3code@v0.0.36...v0.0.37

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.37
maarco pushed a commit to maarco/marcode that referenced this pull request Aug 31, 2026
Upstream's environment-published-themes feature (pingdotgg#8569) is new in this sync, so
its test merged in with no conflict. It seeds localStorage with `t3code:theme`,
but Marcode renamed the selected-theme key to `marcode:theme` in useTheme.ts
while leaving the auxiliary theme keys upstream-shaped.

With no stored selection to find, nothing the suite published was ever resolved
and every assertion read back the default appearance — four failures in the Test
job. Seeded the key Marcode actually reads, and marked the seam.

The feature itself is unaffected: useEnvironmentTheme.ts resolves through
useTheme rather than touching localStorage, so only the fixture was wrong.
juliusmarminge added a commit that referenced this pull request Sep 1, 2026
Restores main features dropped by the policy replay: #8569 theme wiring,
#8850 composer banner follow-ups, #8855/#8904 composer fixes, #8831
settings search rework, #8803 workspace-mutation refresh (v2-adapted),
#8840 circle-alert, #8584 codex artifact templates, #8688/#8807/#8936
video + image previews (web and mobile, v2-adapted), #8862 Expo glass,
and the round's docs. Timeline thinking rows (#8984) stay on the v2
work-live system.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
maarco pushed a commit to maarco/marcode that referenced this pull request Sep 1, 2026
Upstream's new useEnvironmentThemeSync test (pingdotgg#8569) arrived with the
b883fc0 sync and seeds localStorage with `t3code:theme`. Marcode
deliberately renamed that key to `marcode:theme`, so the stored selection
was unreadable, no published theme ever drove the appearance, and all four
assertions resolved dark instead of light.

The merge produced no conflict here: useTheme.ts and the test come from
different sides, so nothing marked the seam. Seeds `marcode:theme` and says
why, matching the literal useTheme.test.ts and themeBoot.test.ts already
use. The test now also pins the key: a sync that reverts useTheme.ts to
upstream's name fails here instead of silently dropping every user's
stored theme.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TRQykYQJKmRh6UmTz2wy3a
juliusmarminge added a commit that referenced this pull request Sep 2, 2026
Restores main features dropped by the policy replay: #8569 theme wiring,
settings search rework, #8803 workspace-mutation refresh (v2-adapted),
video + image previews (web and mobile, v2-adapted), #8862 Expo glass,
and the round's docs. Timeline thinking rows (#8984) stay on the v2
work-live system.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
brentkelly added a commit to brentkelly/t3code-orchestrator that referenced this pull request Sep 2, 2026
* feat(analytics): threads and turns now know which client started them (pingdotgg#7774)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): stop marking mixed tool runs as failed (pingdotgg#7893)

* fix(web): command-click spaced folder links (pingdotgg#6439)

Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>

* fix(chat): stop pushing follow-up messages to the top (pingdotgg#7897)

* test(desktop): remove redundant release note assertion (pingdotgg#7873)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* fix(web): handle wide ordered-list marker edge cases (pingdotgg#7856)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(ssh): restore user PATH for remote servers (pingdotgg#7213)

* fix(desktop): keep tailscale spawn defects from breaking advertised endpoints (pingdotgg#7116)

* fix(web): keep Codex service tier labels readable (pingdotgg#4503)

* fix: render workspace images in chat markdown (pingdotgg#6433)

* fix(clients): keep opening responses visible after turns settle (pingdotgg#7723)

* feat(web): add appearance contrast control (pingdotgg#7906)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: maria <254055478+maria-rcks@users.noreply.github.com>

* fix(server): stop completed Codex threads from staying stuck on working (pingdotgg#7937)

* fix(mobile): preserve markdown image dimensions (pingdotgg#7940)

* fix(web): remove duplicate provider update progress (pingdotgg#7761)

* fix(server): fall back to the remote default branch instead of assuming main (pingdotgg#7078)

* fix(web): give sidebar project menu rows the same side padding as other menus (pingdotgg#7913)

* fix(clients): reconnect after credentials fail during remote server updates (pingdotgg#7953)

* feat(codex): submit thread feedback to OpenAI (pingdotgg#7949)

* fix(server): stop kills lingering Claude work (pingdotgg#5891)

* fix(ci): let Macroscope approve pull requests again (pingdotgg#7970)

* fix(clients): move settled pinned threads into the settled section (pingdotgg#7969)

* perf(ci): speed up release builds and Windows packaging (pingdotgg#7975)

* fix(web): stop tool calls from leaving a blank page in threads (pingdotgg#7971)

* fix(web): stop recovered tool failures from marking work logs red (pingdotgg#7999)

* fix(mobile): isolate markdown image requests (pingdotgg#7942)

* feat(web): redesign skills in `$` menu and in `/` menu (pingdotgg#8009)

* fix(web): restore right panel toggle clicks after closing on desktop (pingdotgg#8016)

* fix(web): keep server update banners flush with the composer (pingdotgg#8000)

* perf(web): reuse work log rows during streaming (pingdotgg#8006)

* fix(web): keep provider badge legible in dark themes (pingdotgg#7968)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: maria <254055478+maria-rcks@users.noreply.github.com>

* fix(web): treat configured urls with uppercase schemes as secure (pingdotgg#8005)

Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>

* fix(desktop): keep release notes visible while downloading (pingdotgg#6412)

* fix(web): show only providers with usage in usage views (pingdotgg#7563)

* fix(web): prevent expanded tool calls from hiding thread content (pingdotgg#8052)

* test(server): remove no-op live activity tests (pingdotgg#8056)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* fix(web): clarify terminal sidebar grouping (pingdotgg#7967)

* fix(codex): show app access approval prompts (pingdotgg#8058)

* feat(web): upload image attachments before sending (pingdotgg#8048)

* fix(server): bound OpenCode skill discovery output (pingdotgg#7675)

Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>

* fix(mobile): persist thread shelf collapse state (pingdotgg#5152)

* fix(mobile): restore Android tablet thread controls, clean up header (pingdotgg#5385)

* fix(mobile): land the first thread open above the composer on Android (pingdotgg#5585)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(server): check out submodules in a new worktree (pingdotgg#7674)

Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr>

* fix(server): preserve merged PR badges after branch deletion (pingdotgg#6216)

* fix(server): return fresh live pull request reads (pingdotgg#6472)

* fix(web): compare client and server versions as semver, not strings (pingdotgg#7579)

* fix(web): stop follow-ups from leaving giant blank space (pingdotgg#8068)

* fix(marketing): stop automatic Vercel deployments on pull requests (pingdotgg#8070)

* chore: vouch repeat contributors (pingdotgg#8071)

* fix(server): keep the authoritative subagent model when snapshots race task_started (pingdotgg#7583)

* fix(server): honor auto-accept edits for the OpenCode provider (pingdotgg#7100)

* fix(server): run the CLI on Node versions without import.meta.main (pingdotgg#7141)

* fix(server): recover from provider interrupt failures (pingdotgg#7412)

* fix(server): recreate a thread's worktree before starting a turn (pingdotgg#7839)

* fix(server): thread delete no longer fails on already-removed worktrees (pingdotgg#8076)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): stop update notices showing through the composer (pingdotgg#8083)

* fix(web): detect outdated nightly servers (pingdotgg#8124)

* fix(web): align usage page skeleton layout (pingdotgg#8111)

* fix(web): make terminal links appear clickable only when clickable (pingdotgg#7488)

* fix(web): make Windows file links clickable in chat (pingdotgg#8081)

* fix(web): sort usage models by token count (pingdotgg#8108)

* fix: open agent file links in the file viewer (pingdotgg#8098)

* fix(server): stop routine events from rescanning thread history (pingdotgg#8150)

* fix(deps): stop pnpm installs from changing the lockfile (pingdotgg#8163)

* feat(web): settle and restore threads with a keyboard shortcut (pingdotgg#8089)

* perf(desktop): cut macOS signing calls by 81% (pingdotgg#8093)

* feat: link pull requests to threads (pingdotgg#8160)

* feat(web): safely attach HEIC photos as JPEG images (pingdotgg#8161)

Co-authored-by: mweinbach <maxweinbach5@gmail.com>

* feat(mobile): track device models and OS versions (pingdotgg#8169)

* fix(grok): bound cumulative tool output updates (pingdotgg#7279)

* fix(web): delay thread shortcut hints by 200 ms (pingdotgg#8172)

* fix(server): stop probing Cursor until enabled (pingdotgg#8175)

* docs(release): verify remote updates with database migrations (pingdotgg#8177)

* fix(server): keep provider CLIs available in the macOS service (pingdotgg#8173)

* feat(claude): compact old threads before they burn through usage (pingdotgg#8144)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(client-runtime): retry queries after connection interruption (pingdotgg#8117)

* fix(server): keep previously used providers working after upgrades (pingdotgg#8176)

* feat(desktop): build macOS previews from a PR label (pingdotgg#8182)

* fix(web): thread jump hints no longer stick after a dictation paste (pingdotgg#8189)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): keep grouped project renames (pingdotgg#7831)

* feat(web): reveal chat file chips in the system file manager (pingdotgg#7140)

Co-authored-by: Dara Adedeji <daraaded@amazon.com>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>

* fix(server): push no longer writes a feature branch's commits to its base branch (pingdotgg#8228)

* chore(deps): bump @clerk/electron to 0.0.37 (pingdotgg#8240)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(server): fetch legacy model classification from a hosted manifest (pingdotgg#8227)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* chore(release): prepare v0.0.34

* fix(desktop): let Clerk UI receive stable auth fixes (pingdotgg#8248)

* fix(app): un-settled threads return to the top of the list (pingdotgg#8231)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* perf(ci): cut about a minute from every release (pingdotgg#8250)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(ci): download macOS preview DMGs without signing in (pingdotgg#8243)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(codex): accept Codex 0.150 multi-agent events (pingdotgg#8346)

* chore(release): prepare v0.0.35

* fix(grok): improve skills, plans, usage, and turn reliability (pingdotgg#8358)

Co-authored-by: Dara Adedeji <daraadedeji07@gmail.com>
Co-authored-by: Ahmed Besic <ahmed-besic@users.noreply.github.com>
Co-authored-by: Michael Brown <michaeltbrown.mtb@gmail.com>
Co-authored-by: Lars Nieuwenhuis <35393046+lnieuwenhuis@users.noreply.github.com>
Co-authored-by: Guilherme Barros <gbarros1095@gmail.com>
Co-authored-by: PC <pc@localhost>
Co-authored-by: 1xpixi <157762409+1xpixi@users.noreply.github.com>

* fix(server): recover stale Codex approval callbacks (pingdotgg#5195)

* test(server): remove duplicate missing worktree test (pingdotgg#8252)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* fix(server): replay all un-applied events during projection bootstrap (pingdotgg#7538)

Co-authored-by: Theo Browne <me@t3.gg>

* test: remove low-signal test files (pingdotgg#8397)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>

* test: prune trivial error and layout tests (pingdotgg#8400)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>

* Fix Android adaptive launcher icon (pingdotgg#4332)

Co-authored-by: Yash Singh <saiansh2525@gmail.com>

* feat(web): split provider settings into list and editor (pingdotgg#8380)

* fix(codex): accept Codex 0.150 account plans (pingdotgg#8447)

* fix(tooling): allow ignored-only staged changes (pingdotgg#8468)

* fix(mobile): keep iOS home header stable (pingdotgg#8467)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(web): stop showing red x summaries for ordinary tool failures (pingdotgg#8395)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(mobile): refine Git action toast glass styling (pingdotgg#8399)

* fix(desktop): allow preview automation in agent-created threads (pingdotgg#8483)

* test(web): remove redundant cache key test (pingdotgg#8484)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* fix(release): move nightly schedule to minute 38

Recent scheduled nightlies have been delayed or skipped.

Move the nightly cron from minute 7 to minute 38. Keep the existing three-hour interval. This tests a different point in each three-hour window without claiming it will fix GitHub schedule delivery.

Authored by GPT-5.6 Sol with the Codex harness.

* fix(web): stabilize the provider settings editor (pingdotgg#8472)

* fix(web): open GitHub pull requests in browser when loading fails (pingdotgg#8507)

* fix(codex): show sub-agent models (pingdotgg#8502)

* feat(analytics): report connected client platforms (pingdotgg#8481)

* feat(server): accept PDF, ZIP, and other file uploads up to 50MB (pingdotgg#8235)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(web): toggle thread pin from the keyboard

Add a mod+shift+p shortcut that pins or unpins the active thread. Ignore the shortcut during terminal focus and when the server does not support thread pinning.

* fix(web): add back button to project settings (pingdotgg#8168)

* refactor(mobile): compile semantic themes for Uniwind (pingdotgg#7327)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(desktop): Cache Runtime locally on WSL Filesystem, dramatically improving launch times  (pingdotgg#5769)

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com>

* fix(mobile): show OpenCode model sources in picker (pingdotgg#8573)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(clients): honor project default models in new threads (pingdotgg#6011)

Co-authored-by: Shivam Sharma <91240327+shivamhwp@users.noreply.github.com>

* fix(mobile): show file actions on Android (pingdotgg#8215)

Co-authored-by: Shivam Sharma <91240327+shivamhwp@users.noreply.github.com>

* fix(connect): explain DPoP connection failures (pingdotgg#8351)

Co-authored-by: Julius Marminge <julius0216@outlook.com>

* feat(web): make the sidebar project filter a searchable combobox (pingdotgg#5931)

* fix(server): a draft can retry its first send after a failed bootstrap (pingdotgg#8226)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(desktop): stop hidden previews draining battery (pingdotgg#8567)

* fix(desktop): oauth popups open from the browser preview (pingdotgg#8435)

Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(web): keep long task drawers usable on small screens (pingdotgg#8313)

* fix(opencode): handle child approvals, stops, and model catalogs (pingdotgg#8480)

* fix: make thread auto-settling opt-in (pingdotgg#8321)

* fix(web): stop session activity timing test from blocking releases (pingdotgg#8585)

* fix(mobile): show composer menus when starting a task (pingdotgg#8587)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(web): show the configured stash shortcut (pingdotgg#8437)

Co-authored-by: Shivam Sharma <91240327+shivamhwp@users.noreply.github.com>

* feat(web): add toggleable confirmation before unpinning a thread (pingdotgg#7313)

Co-authored-by: Shivam Sharma <91240327+shivamhwp@users.noreply.github.com>

* fix: restore automatic thread settling defaults (pingdotgg#8596)

* fix(mobile): restore composer glass and rounded shadows (pingdotgg#8597)

Co-authored-by: Julius Marminge <julius@mac.lan>

* Remove Messages Glass Lab experiment (pingdotgg#8599)

* chore(release): prepare v0.0.36

* Require human review for pull requests changing product defaults (pingdotgg#8603)

* fix(codex): avoid quadratic app-server input buffering (pingdotgg#8605)

* fix(mobile): stabilize iOS header item transitions (pingdotgg#8607)

Co-authored-by: Julius Marminge <julius@mac.lan>

* chore(mobile): upgrade to Expo SDK 57 (pingdotgg#8609)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(mobile): harden native header toolbar items (pingdotgg#8611)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(server): stop querying Claude context usage after turns (pingdotgg#8610)

* chore: vouch ryanrhughes (pingdotgg#8613)

* feat(web): attach PDFs, ZIPs, and other files to a turn (pingdotgg#8236)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): pass stashShortcutLabel in the mixed-attachments stash test

PRs pingdotgg#8437 and pingdotgg#8236 crossed: one made stashShortcutLabel a required
ComposerStashMenu prop, the other added a test case without it, so
main fails web typecheck.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat(web): keybinding settings as settings rows (pingdotgg#8532)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* feat: let an environment publish themes as a file (pingdotgg#8569)

Co-authored-by: Theo Browne <me@t3.gg>

* fix(web): clean up provider settings list and editor (pingdotgg#8504)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(web): keep project picker popup inside the sidebar (pingdotgg#8627)

* fix(mobile): prevent header overflow and back-button artifacts (pingdotgg#8624)

* fix(server): retry automatic thread title generation (pingdotgg#8087)

* fix(client-runtime): refresh edited pull request comments (pingdotgg#8094)

* fix(web): four composer spacing defects (pingdotgg#8090)

* perf(desktop): skip duplicate browser updates (pingdotgg#8018)

Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(web): render nested markdown images correctly (pingdotgg#8501)

* fix(web): unify activity logs and composer banners (pingdotgg#8693)

* fix(mobile): reduce dev-client reload and Metro startup cost (pingdotgg#8694)

Co-authored-by: Julius Marminge <julius@mac.lan>

* revert(web): restore previous composer banners (pingdotgg#8733)

* test(web): remove tests for unreachable helpers (pingdotgg#8738)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* feat(mobile): update tool summaries and chat transitions (pingdotgg#8793)

* feat(web): play video attachments in chat (pingdotgg#8688)

* fix(web,mobile): snooze menu no longer offers the same wake time twice (pingdotgg#8741)

* fix(grok): allow model changes in existing threads (pingdotgg#8392)

Co-authored-by: Ahmed Besic <ahmed-besic@users.noreply.github.com>

* feat(mobile): pick, share, and receive files in threads (pingdotgg#8237)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(web): reduce title bar scroll fade height (pingdotgg#8799)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(windows): strip quotes from repaired PATH (pingdotgg#8746)

* fix(web): open agent images in expanded preview (pingdotgg#8807)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(git): follow repository instructions in generated source control text (pingdotgg#8804)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(server): stop overpricing cached Claude tokens (pingdotgg#8806)

* fix(web): keep image preview above sidebar control (pingdotgg#8811)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(web): keep right panel synced with agent edits (pingdotgg#8803)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(web,mobile): render Codex citations and artifact templates (pingdotgg#8584)

* chore: add Windows setup script to t3.json (pingdotgg#8814)

* fix(web): fold interim turn responses (pingdotgg#8828)

* fix(web): use circle alert for failed tool calls (pingdotgg#8840)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* feat(mobile): add offline iPhone voice input (pingdotgg#8614)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(web): prevent pull request metadata overlap (pingdotgg#8790)

* chore(release): prepare v0.0.37

* Add mobile composer attachment menu with video support (pingdotgg#8843)

* fix(mobile): map native menu icon colors explicitly

* fix(web): restore unified activity logs and composer banners (pingdotgg#8734)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Julius Marminge <jmarminge@gmail.com>

* fix(web): address composer banner review follow-ups (pingdotgg#8850)

* fix(web): widen sync banners and simplify the working timer (pingdotgg#8855)

* fix(preview): improve browser recording quality (pingdotgg#8839)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(web): mark pull request links as external (pingdotgg#8856)

* fix(mobile): replace Callstack glass with Expo glass (pingdotgg#8862)

* fix(server): skip IDE detection in Claude probes (pingdotgg#8634)

* chore(macroscope): review diagnostic overrides (pingdotgg#8917)

Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>

* fix(contracts): accept CLI event origins (pingdotgg#8905)

* fix(web): hide invalid slash skill completions (pingdotgg#8904)

* fix(mobile): defer draft navigation until submission completes (pingdotgg#8914)

* chore: disable CodeRabbit review status (pingdotgg#8933)

* Delete app.json (pingdotgg#8934)

* fix(web): show scrollbar for wide markdown tables (pingdotgg#8868)

* fix(mobile): shimmer active tool rows (pingdotgg#8932)

Co-authored-by: Julius Marminge <julius@mac.lan>

* chore(deps): bump Electron to 43.4.1 (pingdotgg#8626)

* fix(chat): smooth worktree setup status (pingdotgg#8922)

* feat(mobile): add video playback with native iOS controls (pingdotgg#8919)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(web): prevent chat metadata overlap (pingdotgg#8851)

* fix(server): preserve usage cache outside walked roots (pingdotgg#8540)

Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>

* feat(mobile): add native image and PDF previews (pingdotgg#8959)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(server): allow long thread IDs in HTTP routes (pingdotgg#8898)

* fix(shared): preserve Windows shell PATH priority (pingdotgg#8748)

* fix(web): make WSL settings searchable (pingdotgg#8881)

* feat(web): add expand/collapse all control to the files surface (pingdotgg#8889)

* Add auto_review configuration to coderabbit.yaml

* style: format CodeRabbit configuration

* feat(mobile): upload attachments while composing (pingdotgg#8978)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(chat): keep agent activity visible between actions (pingdotgg#8984)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(server): isolate remote web session cookies (pingdotgg#8085)

Co-authored-by: Julius Marminge <julius0216@outlook.com>

* feat(pull-requests): link GitHub references in markdown (pingdotgg#8812)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* perf(server): reduce frequency of full tool call output being loaded into memory from db (pingdotgg#8988)

* feat(web): add pull request list filters (pingdotgg#8809)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* feat(web): search individual settings by detail (pingdotgg#8831)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* feat(client): render viewed images in work logs (pingdotgg#8936)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(client): use package import for markdown image helpers (pingdotgg#9010)

* test: remove static presentation snapshots (pingdotgg#9008)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* perf(server): bound snapshot activity payload memory (pingdotgg#9000)

* perf(server): cut idle CPU use and stop provider event leaks (pingdotgg#8187)

* perf(server): scan only appended transcript bytes for usage summaries (pingdotgg#9024)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Theo Browne <me@t3.gg>

* perf(server): cut chatty tool-update frames by 90% (pingdotgg#8368)

* fix(server): settle threads server-side (pingdotgg#8600)

* fix(clients): dedupe skills in composer menus (pingdotgg#8043)

* fix(server): stop OpenCode child sessions (pingdotgg#9005)

* perf(web): defer pull request line stats until visible (pingdotgg#6471)

Co-authored-by: Theo Browne <me@t3.gg>

* perf(server): skip full-message reads while streaming (pingdotgg#9032)

* perf(client-runtime): halve server config bootstrap traffic (pingdotgg#8367)

Reuse one server config subscription for session bootstrap and live updates.

Preserve environment theme opt-in, replay, deletion, slow subscriber recovery, and config stream failure handling.

Co-authored-by: Adamulek123 <adam.bogucki2018@gmail.com>

* fix(web): align un-settle banner action (pingdotgg#9033)

* fix(web): block type-to-focus behind open dialogs (pingdotgg#8139)

Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>

* feat(shortcuts): copy active thread reference (pingdotgg#8994)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(mobile): keep thread scroll bounds current after animations (pingdotgg#9013)

Co-authored-by: Julius Marminge <julius@mac.lan>

* fix(server): cache project favicon resolution (pingdotgg#9080)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* feat(claude): add Claude Fable 5.1 model (pingdotgg#9078)

* fix(preview): restore recording and macOS rendering after Electron 43 (pingdotgg#9001)

Co-authored-by: Guillermo Casanova <guillermo.casanova.b@gmail.com>

* feat(desktop): add configurable quit shortcut confirmation (pingdotgg#9076)

* feat(web): open project settings from thread menus (pingdotgg#8925)

* fix(chat): reuse one row for live activity (pingdotgg#9062)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* feat(models): discover Claude models from remote manifest (pingdotgg#9084)

* Revert "fix(chat): reuse one row for live activity" (pingdotgg#9096)

* fix(web): sync sidebar PR state from open panel (pingdotgg#9092)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: maria <254055478+maria-rcks@users.noreply.github.com>

* fix(web): changing projects no longer creates a draft (pingdotgg#9097)

* fix(web): keep theme placeholder text dimmer than entered text (pingdotgg#9104)

* fix(web): keep the selected environment when changing projects (pingdotgg#9102)

* docs(plans): t3o-31 upstream sync to v0.0.38

* fix(board): clear the ten pre-existing typecheck errors before the upstream sync (t3o-31 P0)

Two test fakes failed with a bare Error in the Effect failure channel, a
closure-assigned let narrowed to never, and a single-override pill read
overriddenRows[0] under noUncheckedIndexedAccess. None changed behaviour;
they were masked because the recursive typecheck never reached apps/server.

* fix(sync): the three type errors and two test failures the v0.0.38 merge caused

- BoardModelRow reads planModeEnabled from client settings, as the composer does.
- findBranchPullRequest resolves the default branch for upstream's widened PR
  cache key instead of passing null.
- The orphaned-session integration test mocks the supervisor reactor that the
  startup seam yields (new inventory row).
- The projection resume test seeds board projector watermarks into
  boards.projection_state, where t3o-26 reads them, and asserts over the union.
- searchSettings("work") now also matches upstream's worktree/network items.

* refactor(board): native title attributes become BoardHint tooltips

Upstream's new no-native-title-tooltip rule flags every intrinsic-element
title= in the board (61 sites). BoardHint wraps the styled Tooltip primitive
and renders its child as the trigger, so layout is unchanged; a nullish label
renders the child alone.

* docs(seams): record the v0.0.38 sync (t3o-31)

Merge-log row, the decisions taken (plans stay tracked, upstream's settlement
reactor accepted after audit, projector-enumeration policy, launcher protocol
note), an unmarked-edits debt table for the next sync, a marker census, the
three new upstream workflows to disable, and the runbook's per-package
verification notes.

* review(t3o-31): announce the board's status dots, and order the merge log

Round-1 nitpicks: a bare span's aria-label is not announced, so the working,
running and awaiting dots now carry role="img"; the v0.0.38 merge-log row
moves below the two 2026-08-09 rows so the table reads chronologically.

---------

Co-authored-by: Theo Browne <me@t3.gg>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Dara Adedeji <76637177+SunkenInTime@users.noreply.github.com>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: abcdmku <63693423+abcdmku@users.noreply.github.com>
Co-authored-by: Guilherme Barros <gbarros1095@gmail.com>
Co-authored-by: Rishet11 <154429365+Rishet11@users.noreply.github.com>
Co-authored-by: Alex <me@pixp.cc>
Co-authored-by: maria <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: Naveed Iqbal <naveediqbal949@gmail.com>
Co-authored-by: Ishaan Kothari <ishaanko.mail@gmail.com>
Co-authored-by: Exotic <118054752+extoci@users.noreply.github.com>
Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com>
Co-authored-by: Bilal Bakr <62337003+Bil0000@users.noreply.github.com>
Co-authored-by: Rakshith Bhat <88523594+RakshithBhat03@users.noreply.github.com>
Co-authored-by: Simone <lucenz@proton.me>
Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>
Co-authored-by: Tristan Knight <admin@snappeh.com>
Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com>
Co-authored-by: Pavlo Trinko <paul.trinko95@gmail.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Rodrigo Brechard <rodrigobrechard@gmail.com>
Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr>
Co-authored-by: Adamulek123 <adam.bogucki2018@gmail.com>
Co-authored-by: spiky02plateau <155588579+spiky02plateau@users.noreply.github.com>
Co-authored-by: Carlos Jimenez <cjimenez@r21digital.com>
Co-authored-by: Mark Griffin <mrmg@deflexion.net>
Co-authored-by: MacKinley Smith <smithmackinley@gmail.com>
Co-authored-by: oliver <97427849+flamboh@users.noreply.github.com>
Co-authored-by: mweinbach <maxweinbach5@gmail.com>
Co-authored-by: Lars Nieuwenhuis <35393046+lnieuwenhuis@users.noreply.github.com>
Co-authored-by: Mohtasham Murshid <154406804+MohtashamMurshid@users.noreply.github.com>
Co-authored-by: Dara Adedeji <daraaded@amazon.com>
Co-authored-by: Dara Adedeji <daraadedeji07@gmail.com>
Co-authored-by: Ahmed Besic <ahmed-besic@users.noreply.github.com>
Co-authored-by: Michael Brown <michaeltbrown.mtb@gmail.com>
Co-authored-by: PC <pc@localhost>
Co-authored-by: 1xpixi <157762409+1xpixi@users.noreply.github.com>
Co-authored-by: Josh <gitlucky@pipelab.org>
Co-authored-by: Tradi3 <56069280+krutftw@users.noreply.github.com>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>
Co-authored-by: Ivan Malison <IvanMalison@gmail.com>
Co-authored-by: Yash Singh <saiansh2525@gmail.com>
Co-authored-by: Gianmarco <gianmarcosimone89@gmail.com>
Co-authored-by: Julius Marminge <julius@mac.lan>
Co-authored-by: Illia Panasenko <hello@ipanasenko.me>
Co-authored-by: Matheson Steplock <ikifar2012@users.noreply.github.com>
Co-authored-by: Anirudh Coontoor <anirudh@gosupernova.live>
Co-authored-by: Nick Anisimov <n.anisimov.23@gmail.com>
Co-authored-by: Muhammad Waleed <114993336+walid-baharwal@users.noreply.github.com>
Co-authored-by: Ryan Hughes <ryan@heyoodle.com>
Co-authored-by: Vitaly Iegorov <vitalyiegorov@gmail.com>
Co-authored-by: Ahmed Besic <ahmed.besic2000@gmail.com>
Co-authored-by: maria <maria@kuuro.net>
Co-authored-by: Matthew Feroz <136640686+MatthewFeroz@users.noreply.github.com>
Co-authored-by: Julius Marminge <jmarminge@gmail.com>
Co-authored-by: Aditya Garud <153842990+yashranaway@users.noreply.github.com>
Co-authored-by: Yukun Shan <92423096+nateEc@users.noreply.github.com>
Co-authored-by: Will Sheldon <will@autimo.com>
Co-authored-by: mic <85814106+q1@users.noreply.github.com>
Co-authored-by: Guillermo Casanova <guillermo.casanova.b@gmail.com>
juliusmarminge added a commit that referenced this pull request Sep 2, 2026
Restores main features dropped by the policy replay: #8569 theme wiring,
settings search rework, #8803 workspace-mutation refresh (v2-adapted),
video + image previews (web and mobile, v2-adapted), #8862 Expo glass,
and the round's docs. Timeline thinking rows (#8984) stay on the v2
work-live system.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Sep 2, 2026
Restores main features dropped by the policy replay: #8569 theme wiring,
settings search rework, #8803 workspace-mutation refresh (v2-adapted),
video + image previews (web and mobile, v2-adapted), #8862 Expo glass,
and the round's docs. Timeline thinking rows (#8984) stay on the v2
work-live system.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL 1,000+ changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants